Report child nodes of the "/" path The code in dbus-c++ which searches for child nodes of a path did not special case the prefix used for searching for children of "/". Add this code, as well as adding another special case to avoid including "" as a child of "/" (since the "/" is a strict substring of "/"). BUG=chromium:394470 TEST=gdbus introspect --system --dest org.chromium.flimflam --object-path / --recurse --only-properties dbus-send --system --dest=org.chromium.flimflam --type=method_call --print-reply / org.freedesktop.DBus.Introspectable.Introspect Change-Id: I622603bcbf6dcec2c1541f77fb10c60b2982ca81 Reviewed-on: https://chromium-review.googlesource.com/211617 Reviewed-by: mukesh agrawal <quiche@chromium.org> Commit-Queue: Paul Stewart <pstew@chromium.org> Tested-by: Paul Stewart <pstew@chromium.org>
diff --git a/src/introspection.cpp b/src/introspection.cpp index 1ff179e..f6f6bcc 100644 --- a/src/introspection.cpp +++ b/src/introspection.cpp
@@ -114,7 +114,8 @@ } } - const ObjectPathList nodes = ObjectAdaptor::child_nodes_from_prefix(path + '/'); + const std::string prefix(path == "/" ? path : path + '/'); + const ObjectPathList nodes = ObjectAdaptor::child_nodes_from_prefix(prefix); ObjectPathList::const_iterator oni; for (oni = nodes.begin(); oni != nodes.end(); ++oni)
diff --git a/src/object.cpp b/src/object.cpp index c9bf02d..40f7cac 100644 --- a/src/object.cpp +++ b/src/object.cpp
@@ -133,7 +133,8 @@ while (ati != _adaptor_table.end()) { - if (!strncmp(ati->second->path().c_str(), prefix.c_str(), plen)) + if (ati->second->path() != "/" && // Root node is never a child. + !strncmp(ati->second->path().c_str(), prefix.c_str(), plen)) { std::string p = ati->second->path().substr(plen); p = p.substr(0,p.find('/'));